﻿#ifndef _NET_CMD_H
#define _NET_CMD_H

//忽略安全函数警告 
#pragma warning(disable : 4996)

//////////////////////////////////////////////////////////////////////////
//公共宏定义
#define MIN_USERNAME_LEN	3		//用户名最小长度
#define MAX_USERNAME_LEN	33		//用户名最大长度
#define MIN_PASSWORD_LEN	3		//密码最小长度
#define MAX_PASSWORD_LEN	33		//密码最大长度
#define MAX_VERSION_LEN		6		//版本号长度
#define MAX_WARNING_LEN		255		//服务器返回的提示信息最大长度
#define MAX_MACHINECODE_LEN	65		//机器码最大长度
#define MAX_QQNUMBER_LEN	12		//QQ号码最大长度
#define MAX_EMAIL_LEN		255		//电子邮箱最大长度
#define CLIENTKEY_LEN		33		//ClientKey最大长度
#define CARD_ID_LEN			33		//充值卡卡号最大长度
#define CARD_PASS_LEN		7		//充值卡密码最大长度
#define CARD_KIND_LEN		12		//充值卡类型最大长度

//////////////////////////////////////////////////////////////////////////
//参数
#define VERIFY_MACHINE_CODE	true	//是否验证机器码
#define HEART_TIMEOUT		120		//心跳包超时时间（秒）
#define SYN_HEART_PACKET	45		//客户端发送心跳包间隔（秒）
//////////////////////////////////////////////////////////////////////////
//数据库参数
#define DEFAULT_PORT	9527
#define DEFAULT_DB_SERVER	"LocalHost@soft_qz"	//数据库服务器
#define DEFAULT_DB_USER		"sa"				//登录用户名
#define DEFAULT_DB_PASS		"meiyoumima9527"		//数据库密码
//////////////////////////////////////////////////////////////////////////
//通信指令
#define CMD_QUERY_VERSION	1		//查询版本号请求指令
#define CMD_LOGIN			2		//登录请求指令
#define CMD_S_SEND_KEY		3		//返回ClientKey
#define CMD_C_HEART_PACKET	4		//心跳包请求
#define CMD_RECHARGE		5		//充值请求
#define CMD_REGISTER		6		//注册用户
#define CMD_QUERY_MEMBER	7		//查询余额（到期时间）
//////////////////////////////////////////////////////////////////////////
//正则表达式
#define STR(s) #s

//用户名
#define _REGEX_USERNAME(MIN_USERNAME_LEN, MAX_USERNAME_LEN) "^[a-z][a-z0-9_]{"STR(MIN_USERNAME_LEN)","STR(MAX_USERNAME_LEN)"}$"
#define REGEX_USERNAME _REGEX_USERNAME(MIN_USERNAME_LEN, MAX_USERNAME_LEN)
//密码
#define _REGEX_PASSWORD(MIN_PASSWORD_LEN, MAX_PASSWORD_LEN) "^[a-zA-Z0-9_]{"STR(MIN_PASSWORD_LEN)","STR(MAX_PASSWORD_LEN)"}$"
#define REGEX_PASSWORD _REGEX_PASSWORD(MIN_PASSWORD_LEN, MAX_PASSWORD_LEN)


//////////////////////////////////////////////////////////////////////////

//储存日期的结构
struct NET_CMD_DATETIME
{
	int Years;
	int Months;
	int Days;
	int Hours;
	int Minutes;
	int Seconds;

	NET_CMD_DATETIME()
	{
		Years = 0;
		Months = 0;
		Days = 0;
		Hours = 0;
		Minutes = 0;
		Seconds = 0;
	}
};

//通信结构
struct NET_CMD
{
	int	 nCmd;								//命令
	bool bAllow;							//请求是否被服务端允许
	char szVersion[MAX_VERSION_LEN];		//版本号
	char szUsername[MAX_USERNAME_LEN];		//用户名
	char szPassword[MAX_PASSWORD_LEN];		//密码
	char szMachineCode[MAX_MACHINECODE_LEN];//机器码
	char szQQNumber[MAX_QQNUMBER_LEN];		//QQ号码
	char szCardId[CARD_ID_LEN];				//充值卡卡号
	char szCardPass[CARD_PASS_LEN];			//充值卡密码
	char szCardKind[CARD_KIND_LEN];			//充值卡类型
	char szClientKey[CLIENTKEY_LEN];		//客户端密钥（会话唯一身份牌）
	char szWarningText[MAX_WARNING_LEN];	//服务器返回的提示信息
	NET_CMD_DATETIME tmRemain;				//用户剩余使用时间
	NET_CMD_DATETIME tmDateTimeOut;			//用户到期时间

	NET_CMD()
	{
		nCmd = 0;
		bAllow = false;

		memset(szUsername, 0, MAX_USERNAME_LEN);
		memset(szPassword, 0, MAX_PASSWORD_LEN);
		memset(szQQNumber, 0, MAX_QQNUMBER_LEN);
		memset(szCardId, 0, CARD_ID_LEN);
		memset(szCardPass, 0, CARD_PASS_LEN);
		memset(szClientKey, 0, CLIENTKEY_LEN);
		memset(szWarningText, 0, MAX_WARNING_LEN);
		memset(szVersion, 0, MAX_VERSION_LEN);
		memset(szMachineCode, 0, MAX_MACHINECODE_LEN);
		memset(szCardKind, 0, CARD_KIND_LEN);
		
	}
};

#endif